Tutustu edistyneisiin WebXR-asennon ennustusalgoritmeihin. Opi torjumaan latenssia ja luomaan sulavampia, immersiivisempiä virtuaali- ja lisätyn todellisuuden kokemuksia syväoppaamme avulla.
WebXR:n mestarointi: Syväsukellus asentojen ennustusalgoritmeihin immersiivisiä kokemuksia varten
Todellisen immersion näkymätön haaste
WebXR mullistaa tapamme olla vuorovaikutuksessa digitaalisen sisällön kanssa, kuljettaen meidät virtuaalimaailmoihin ja lisäten tietoa fyysisen todellisuutemme päälle. Näiden kokemusten taika riippuu yhdestä ratkaisevasta elementistä: immersiosta. Jotta kokemus tuntuisi todelliselta, virtuaalimaailman on reagoitava liikkeisiimme välittömästi ja tarkasti. Kun käännät päätäsi, maailman pitäisi kääntyä mukanasi virheettömästi. Kun kurotat kohti virtuaalista esinettä, sen pitäisi olla juuri siellä, missä odotat sen olevan. Tämä saumaton yhteys on läsnäolon perusta.
Kuitenkin näkymätön vihollinen työskentelee jatkuvasti tämän illuusion rikkomiseksi: latenssi. Erityisesti liikkeestä fotoniin -latenssi – pieni mutta havaittava viive pääsi liikuttamisen ja vastaavan päivitetyn kuvan silmiisi saapumisen välillä. Jopa muutaman millisekunnin viive voi luoda epäyhteyden, joka saa virtuaalimaailman tuntumaan 'uivalta' tai laahaavalta. Tämä ei ainoastaan riko immersiota, vaan on myös pääsyy simulaatiosairauteen, joka on merkittävä este XR:n laajalle käyttöönotolle.
Kuinka nykypäivän kehittyneet VR- ja AR-järjestelmät taistelevat tätä perustavanlaatuista laitteisto- ja ohjelmistorajoitusta vastaan? Vastaus ei ole vain nopeammat prosessorit; se on nerokas ja välttämätön tekniikka nimeltä asennon ennustaminen. Tämä artikkeli vie sinut syväsukellukselle asennon ennustusalgoritmien maailmaan. Tutkimme, miksi se on välttämätöntä, miten se toimii yksinkertaisesta ekstrapoloinnista edistyneisiin suodatustekniikoihin, ja kuinka sinä WebXR-kehittäjänä voit hyödyntää näitä käsitteitä rakentaaksesi sulavampia, mukavampia ja todella immersiivisiä kokemuksia maailmanlaajuiselle yleisölle.
Ongelman ymmärtäminen: Latenssi XR-putkessa
Ymmärtääksemme ratkaisua meidän on ensin ymmärrettävä ongelma. Matka fyysisestä liikkeestä renderöityyn pikseliin on monivaiheinen prosessi, ja jokainen vaihe lisää pienen määrän aikaa. Tätä viiveiden ketjua kutsutaan renderöintiputkeksi.
Kuvittele, että käännät päätäsi oikealle. Tässä on yksinkertaistettu erittely siitä, mitä tapahtuu ja missä latenssi hiipii mukaan:
- Sensorilukema: Inertiamittayksiköt (IMU), kuten kiihtyvyysanturit ja gyroskoopit kuulokkeiden sisällä, havaitsevat pyörimisen. Tämä ei ole välitöntä; datan näytteistys vie aikaa. (Latenssi: ~1-4ms)
- Datan siirto & käsittely: Raaka sensoridata lähetetään pääprosessorille. Se saatetaan suodattaa ja yhdistää muuhun dataan (esim. kameroista paikannusseurantaa varten). (Latenssi: ~2-5ms)
- Sovelluslogiikka: WebXR-sovelluksesi vastaanottaa asentotiedot. JavaScript-koodisi suoritetaan, määrittäen mitä näytöllä tulee olla käyttäjän uuden sijainnin ja suunnan perusteella. Tämä sisältää fysiikkalaskelmat, tekoälyn toiminnan ja pelitilan päivitykset. (Latenssi: Vaihtelee, voi olla 5ms+)
- Renderöinti: CPU lähettää piirtokutsut GPU:lle. GPU renderöi sitten 3D-näkymän uudesta perspektiivistä 2D-kuvaksi (tai kahdeksi, yksi kummallekin silmälle). Tämä on usein aikaa vievin vaihe. (Latenssi: ~5-11ms, riippuen näkymän monimutkaisuudesta ja GPU:n tehosta)
- Näytön pyyhkäisy: Lopullinen renderöity kuva lähetetään näytölle. Näytöllä itsellään kestää aikaa päivittää pikselit rivi riviltä. Tätä kutsutaan 'scanoutiksi'. (Latenssi: ~5-11ms, riippuu virkistystaajuudesta)
Kun nämä viiveet lasketaan yhteen, kokonaisliikkeestä fotoniin -latenssi voi helposti ylittää 20 millisekuntia, ja usein paljon enemmän. Vaikka 20 ms (1/50 sekuntia) kuulostaa uskomattoman nopealta, ihmisen havaintokyky, erityisesti tasapainoaistimme (vestibulaarijärjestelmä), on äärimmäisen herkkä tuntemamme ja näkemämme välisille epäjohdonmukaisuuksille. Yli 20 ms:n viive on yleisesti ottaen havaittavissa ja voi johtaa epämukavuuteen.
Tässä kohtaa asennon ennustamisesta tulee ei vain 'kiva lisä', vaan ehdoton välttämättömyys toimivalle XR-järjestelmälle.
Ydinkonsepti: Mitä on asennon ennustaminen?
Yksinkertaisesti sanottuna asennon ennustaminen on ennustamisen taitoa. Sen sijaan, että kertoisimme renderöintimoottorille, missä käyttäjän pää oli, kun sensorit luettiin, kerromme sille, missä uskomme käyttäjän pään olevan tarkalleen tulevalla hetkellä, kun renderöity kehys näytetään heidän silmilleen.
Ajattele klassista tosielämän esimerkkiä: pallon kiinniottamista. Kun ystävä heittää sinulle pallon, et ojenna kättäsi pallon nykyiseen sijaintiin. Aivosi laskevat vaistomaisesti sen nopeuden ja lentoradan, ja siirrät kätesi sieppaamaan sen tulevassa aika-avaruuden pisteessä. Asennon ennustusalgoritmit tekevät saman käyttäjän päälle ja ohjaimille.
Prosessi näyttää tältä:
- Järjestelmä mittaa nykyisen asennon (sijainnin ja suunnan) ja sen derivaatat (nopeuden ja kulmanopeuden).
- Se laskee putken kokonaislatenssin tulevalle kehykselle ('ennustushorisontti').
- Se käyttää ennustusalgoritmia ekstrapoloidakseen asentoa ajassa eteenpäin kyseisen määrän.
- Tämä ennustettu asento lähetetään sitten renderöintimoottorille.
Jos ennustus on tarkka, siihen mennessä kun fotonit näytöltä osuvat käyttäjän verkkokalvoon, renderöity kuva vastaa täydellisesti heidän todellista suuntautumistaan, käytännössä kumoten putken latenssin ja luoden vankan, vakaan virtuaalimaailman.
Perustason ennustusalgoritmit: Yksinkertaisesta edistyneeseen
Asennon ennustamiseen voidaan käyttää useita algoritmeja, jotka vaihtelevat monimutkaisuudeltaan ja tarkkuudeltaan. Tutustutaanpa joihinkin yleisimmistä lähestymistavoista, aloittaen perusteista.
1. Lineaarinen ekstrapolointi (kytkyennustaminen)
Yksinkertaisin ennustamisen muoto on lineaarinen ekstrapolointi, jota kutsutaan usein 'kytkyennustamiseksi'. Se olettaa, että käyttäjä jatkaa liikkumista nykyisellä nopeudellaan ilman muutoksia.
Kaava on suoraviivainen:
ennustettu_sijainti = nykyinen_sijainti + nykyinen_nopeus * ennustusaika
Vastaavasti suunnalle:
ennustettu_suunta = nykyinen_suunta + nykyinen_kulmanopeus * ennustusaika
Pseudokoodiesimerkki JavaScriptillä:
function predictLinear(pose, predictionTime) {
const predictedPosition = {
x: pose.position.x + pose.linearVelocity.x * predictionTime,
y: pose.position.y + pose.linearVelocity.y * predictionTime,
z: pose.position.z + pose.linearVelocity.z * predictionTime
};
// Huom: Suunnan ennustaminen on monimutkaisempaa ja sisältää kvaternioita.
// Tämä on yksinkertaistettu käsitteellinen esitys.
const predictedOrientation = ...; // Sovella kulmanopeutta kvaternioon
return { position: predictedPosition, orientation: predictedOrientation };
}
- Edut: Erittäin helppo toteuttaa ja laskennallisesti kevyt. Vaatii minimaalisen vähän prosessointitehoa.
- Haitat: Erittäin epätarkka. Toimii hyvin vain täysin tasaisessa liikkeessä. Heti kun käyttäjä kiihdyttää, hidastaa tai muuttaa suuntaa, tämä malli epäonnistuu näyttävästi, johtaen ylilyönteihin tai laahaamiseen. Ihmisen pään pyörimisliikkeisiin, jotka ovat harvoin tasaisella nopeudella, tämä menetelmä on yksinään riittämätön.
2. Toisen asteen ennustaminen (mukaan lukien kiihtyvyys)
Luonnollinen parannus on ottaa kiihtyvyys huomioon. Tämä toisen asteen malli tarjoaa tarkemman ennusteen, erityisesti liikkeille, jotka ovat alkamassa tai päättymässä.
Kaava laajentaa lineaarista mallia, lainaten perusfysiikasta:
ennustettu_sijainti = nykyinen_sijainti + (nykyinen_nopeus * ennustusaika) + (0.5 * nykyinen_kiihtyvyys * ennustusaika^2)
Pseudokoodiesimerkki:
function predictWithAcceleration(pose, predictionTime) {
const dt = predictionTime;
const predictedPosition = {
x: pose.position.x + (pose.linearVelocity.x * dt) + (0.5 * pose.linearAcceleration.x * dt * dt),
y: pose.position.y + (pose.linearVelocity.y * dt) + (0.5 * pose.linearAcceleration.y * dt * dt),
z: pose.position.z + (pose.linearVelocity.z * dt) + (0.5 * pose.linearAcceleration.z * dt * dt)
};
// ... ja niin edelleen suunnalle kulmakiihtyvyyden kanssa
return { position: predictedPosition, ... };
}
- Edut: Tarkempi kuin lineaarinen ekstrapolointi, koska se voi mallintaa nopeuden muutoksia. Se käsittelee paremmin liikkeen alkua ja loppua.
- Haitat: Se on erittäin herkkä 'kohinaiselle' datalle. Sensorilukemista johdettu kiihtyvyys voi olla hyvin tärisevää, ja tämän tärisevän datan soveltaminen neliölliseen kaavaan voi vahvistaa kohinaa, aiheuttaen epävakaita ennusteita. Lisäksi se olettaa jatkuvaa kiihtyvyyttä, mikä on myös harvoin totta ihmisen liikkeelle.
3. Kalman-suodin: Alan standardi vankkaan estimointiin
Vaikka yksinkertaisella ekstrapoloinnilla on käyttönsä, modernit XR-järjestelmät luottavat paljon kehittyneempiin tekniikoihin. Näistä merkittävin ja tehokkain on Kalman-suodin. Kalman-suotimen koko matematiikan selittäminen (joka sisältää matriisialgebraa) on tämän artikkelin ulkopuolella, mutta voimme ymmärtää sen käsitteellisesti.
Analogia: Sukellusveneen seuraaminen
Kuvittele, että olet laivalla yrittämässä seurata sukellusvenettä. Sinulla on kaksi tietolähdettä:
- Mallisi: Tiedät, miten sukellusveneet yleensä liikkuvat – niiden huippunopeuden, kuinka nopeasti ne voivat kääntyä jne. Sen viimeisimmän tunnetun sijainnin ja nopeuden perusteella voit ennustaa, missä sen pitäisi olla nyt.
- Mittauksesi: Lähetät kaikuluotainpingin. Paluusignaali antaa sinulle mittauksen sukellusveneen sijainnista, mutta tämä mittaus on kohinainen ja epätarkka vesiolosuhteiden, kaikujen jne. vuoksi.
Kumpaan luotat? Täydellisen maailman ennusteeseesi vai kohinaiseen tosimaailman mittaukseesi? Kalman-suodin tarjoaa tilastollisesti optimaalisen tavan yhdistää ne. Se tarkastelee ennusteesi epävarmuutta ja mittauksesi epävarmuutta ja tuottaa uuden, parannetun arvion, joka on tarkempi kuin kumpikaan tietolähde yksinään.
Kalman-suodin toimii jatkuvassa kaksivaiheisessa silmukassa:
- Ennustusvaihe: Liikemallia (kuten yllä olevaa kiihtyvyysmallia) käyttäen suodin ennustaa järjestelmän seuraavan tilan (esim. sijainti, nopeus) ja kyseisen ennusteen epävarmuuden. Ajan myötä epävarmuus kasvaa, koska vain arvaamme.
- Päivitysvaihe: Suodin saa uuden mittauksen sensoreilta (esim. IMU-dataa). Se vertaa tätä mittausta ennusteeseensa. Sen perusteella, kuinka 'kohinaisen' mittauksen odotetaan olevan, se laskee 'Kalman Gainin' – arvon, joka määrittää, kuinka paljon uuteen mittaukseen luotetaan. Sitten se korjaa alkuperäisen ennusteensa, mikä johtaa uuteen, tarkempaan tila-arvioon pienemmällä epävarmuudella.
Edut WebXR:lle:
- Kohinan vähentäminen: Se on erinomainen suodattamaan satunnaista kohinaa IMU-sensoreista, tarjoten paljon sulavamman ja vakaamman arvion käyttäjän asennosta.
- Sensorifuusio: Se on luonnollinen kehys eri tyyppisten sensorien tietojen yhdistämiseen. Esimerkiksi se voi yhdistää IMU:n korkeataajuisen mutta ajautuvan datan kamerapohjaisen seurantajärjestelmän (inside-out tracking) matalataajuisempaan mutta absoluuttiseen sijaintitietoon saadakseen parhaat puolet molemmista.
- Vankka tilan estimointi: Se ei ainoastaan tarjoa asentoa; se ylläpitää kattavaa arviota järjestelmän tilasta, mukaan lukien nopeus ja kiihtyvyys. Tämä puhdas, suodatettu tila on täydellinen syöte lopulliselle, yksinkertaiselle ennustusvaiheelle (kuten toisen asteen malli) asennon projisoimiseksi tulevaisuuteen.
Kalman-suodin (ja sen variantit, kuten laajennettu Kalman-suodin tai hajautettu Kalman-suodin) on modernien kaupallisten kuulokkeiden vakaan seurannan takana oleva työjuhta.
Toteutus WebXR Device API:ssa: Mitä et näe
Nyt hyvät uutiset. WebXR-kehittäjänä sinun ei yleensä tarvitse toteuttaa Kalman-suodinta käyttäjän pään asennolle. WebXR-ekosysteemi on suunniteltu abstrahoimaan tämä monimutkaisuus pois sinulta.
Kun kutsut `xrFrame.getViewerPose(xrReferenceSpace)` `requestAnimationFrame`-silmukassasi, saamasi asento ei ole raakaa sensoridataa. Taustalla oleva XR-ajonaikainen ympäristö (esim. Meta Quest OS, SteamVR, Windows Mixed Reality) on jo suorittanut sarjan uskomattoman kehittyneitä operaatioita:
- Lukeminen useista sensoreista (IMU:t, kamerat).
- Sensoridatan yhdistäminen käyttäen edistynyttä suodatusalgoritmia, kuten Kalman-suodinta.
- Tarkan liikkeestä fotoniin -latenssin laskeminen nykyiselle kehykselle.
- Suodatetun tilan käyttäminen katsojan asennon ennustamiseen juuri sille tulevalle hetkelle.
Saamasi `XRPose`-objekti on lopullinen, ennustettu tulos. Selain ja laitteisto toimivat yhdessä toimittaakseen tämän sinulle, varmistaen että kehittäjät voivat keskittyä sovelluslogiikkaan matalan tason sensorifysiikan sijaan. `XRViewerPose`:n `emulatedPosition`-ominaisuus jopa kertoo sinulle, onko sijaintia aktiivisesti seurattu vai onko se päätelty tai palannut yksinkertaiseen malliin, mikä on hyödyllistä palautteen antamiseksi käyttäjälle.
Milloin toteuttaisit oman ennustuksesi?
Jos API hoitaa kriittisimmän ennustuksen puolestamme, miksi on tärkeää ymmärtää näitä algoritmeja? Koska on olemassa useita edistyneitä käyttötapauksia, joissa sinun, kehittäjän, on toteutettava ennustaminen itse.
1. Verkotettujen avatarien ennustaminen
Tämä on yleisin ja kriittisin käyttötapaus. Monen käyttäjän sosiaalisessa VR- tai yhteistyösovelluksessa saat tietoa muiden käyttäjien liikkeistä verkon kautta. Tämä data on aina myöhässä verkkolatenssin vuoksi.
Jos vain renderöit toisen käyttäjän avatarin viimeisimpään vastaanotettuun sijaintiin, heidän liikkeensä näyttää uskomattoman nykivältä ja viivästyneeltä. He näyttävät teleporttaavan pisteestä toiseen uusien datapakettien saapuessa. Tämän ratkaisemiseksi sinun on toteutettava asiakaspuolen ennustaminen.
Yleinen strategia on nimeltään entiteettien interpolointi ja ekstrapolointi:
- Tallenna historia: Säilytä lyhyt historia viimeisimmistä asentopäivityksistä jokaiselle etäkäyttäjälle.
- Interpoloi: Sulavaa toistoa varten, sen sijaan että hyppäisit viimeisimpään vastaanotettuun asentoon, voit animoida (interpoloida) avatarin sujuvasti sen aiemmin renderöidystä asennosta tähän uuteen tavoiteasentoon lyhyen ajan kuluessa (esim. 100 ms). Tämä piilottaa päivitysten pakettipohjaisen luonteen.
- Ekstrapoloi: Jos et saa uutta pakettia ajoissa, et voi vain pysäyttää avataria. Se näyttäisi jäätyneeltä. Sen sijaan käytät sen viimeisintä tunnettua nopeutta ekstrapoloidaksesi sen sijaintia eteenpäin ajassa käyttämällä yksinkertaista lineaarista tai toisen asteen mallia. Tämä pitää avatarin liikkeessä sulavasti, kunnes seuraava datapaketti saapuu korjaamaan sen sijaintia.
Tämä luo illuusion sulavasta, reaaliaikaisesta liikkeestä muille käyttäjille, jopa verkoissa, joissa on vaihteleva latenssi, mikä on globaali todellisuus.
2. Fysiikkapohjaisten vuorovaikutusten ennustaminen
Kun käyttäjä on vuorovaikutuksessa virtuaalimaailman kanssa, kuten heittäessään palloa, ennustaminen on avainasemassa. Kun käyttäjä vapauttaa virtuaalisen pallon, sovelluksesi saa ohjaimen asennon, lineaarisen nopeuden ja kulmanopeuden juuri sillä hetkellä WebXR API:lta.
Tämä data on täydellinen lähtökohta fysiikkasimulaatiolle. Voit käyttää näitä alkuperäisiä nopeusvektoreita ennustaaksesi tarkasti heitetyn objektin lentoradan, mikä tekee vuorovaikutuksista luonnollisia ja intuitiivisia. Tämä on ennustamisen muoto, mutta se perustuu fysiikkamalleihin eikä sensorisuodatukseen.
3. Mukautetut seuratut objektit ja oheislaitteet
Kuvittele, että rakennat kokemusta, joka käyttää mukautettua fyysistä ohjainta – ehkä lelumiekkaa tai erikoistyökalua – jota seurataan IMU:lla (kuten ESP32 tai Arduino) ja joka lähettää datansa WebXR-sovellukseesi WebSocketsin tai Web Bluetoothin kautta. Tässä skenaariossa olet vastuussa kaikesta. Raaka data mukautetusta laitteistostasi on kohinaista ja altis verkko-/Bluetooth-latenssille. Jotta tämä objekti näyttäisi vakaalta ja reagoivalta VR:ssä, sinun olisi toteutettava oma suodatuksesi (kuten Kalman-suodin tai yksinkertaisempi komplementaarisuodin) ja ennustuslogiikkasi JavaScript-koodissasi.
Parhaat käytännöt ja globaalit näkökohdat
Riippumatta siitä, luotatko API:n ennustukseen vai toteutatko omasi, pidä nämä periaatteet mielessä:
- Suorituskyky on ensisijaista: Ennustusalgoritmit, erityisesti JavaScriptissä ajettavat mukautetut, lisäävät laskennallista kuormaa. Profiloi koodisi säälimättä. Varmista, että ennustuslogiikkasi ei aiheuta kehysten menettämistä, sillä se vesittäisi koko latenssin vähentämisen tarkoituksen.
- Luota natiiviin toteutukseen: Käyttäjän pään ja pääohjainten osalta luota aina `getViewerPose()`- ja `getPose()`-metodien antamaan asentoon. Se on tarkempi kuin mikään, mitä voit toteuttaa JavaScriptissä, koska sillä on pääsy alemman tason laitteistodataan ja ajoituksiin.
- Rajoita ennusteitasi: Ihmisen liike on arvaamatonta. Käyttäjä saattaa yhtäkkiä pysähtyä tai nykäistä päätään. Yksinkertainen ennustusmalli saattaa ylittää reilusti näissä tapauksissa. On usein viisasta rajoittaa ennusteen suuruutta epärealististen tai häiritsevien liikkeiden estämiseksi, erityisesti verkotettujen avatarien kohdalla.
- Suunnittele monimuotoiselle maailmalle: Kun käsittelet verkotettuja kokemuksia, muista, että käyttäjillä on hyvin erilaiset verkko-olosuhteet. Ennustus- ja interpolointilogiikkasi on oltava riittävän vankka käsittelemään korkean latenssin ja suuren värinän yhteyksiä sulavasti tarjotakseen käyttökelpoisen kokemuksen kaikille, kaikkialla.
Asennon ennustamisen tulevaisuus
Asennon ennustamisen ala kehittyy jatkuvasti. Horisontissa näemme useita jännittäviä edistysaskeleita:
- Koneoppimismallit: Sen sijaan, että luotettaisiin yleisiin fysiikkamalleihin, tulevaisuuden järjestelmät voivat käyttää tekoäly-/koneoppimismalleja, jotka on koulutettu valtavilla ihmisliikkeen aineistoilla. Nämä mallit voisivat oppia yksittäisen käyttäjän erityiset liikeradat ja tavat tehdäkseen entistä tarkempia, henkilökohtaisia ennusteita.
- Laitteiston kehitys: Kun näyttöjen virkistystaajuudet kasvavat (120 Hz, 144 Hz ja darüber) ja sensorien näytteenottotaajuudet paranevat, vaadittu 'ennustushorisontti' pienenee. Tämä vähentää järjestelmän riippuvuutta pitkän kantaman ennustamisesta, mikä tekee ongelmasta helpomman ja tuloksista luotettavampia.
- Reunalaskenta ja 5G: Monen käyttäjän kokemuksissa 5G:n ja reunalaskennan käyttöönotto lupaa dramaattisesti alentaa verkkolatenssia. Vaikka tämä ei poista asiakaspuolen ennustamisen tarvetta, se vähentää merkittävästi virhemarginaalia, johtaen tarkempiin ja reagoivampiin sosiaalisiin vuorovaikutuksiin.
Yhteenveto: Uskottavuuden perusta
Asennon ennustaminen on yksi XR-teknologiapinon kriittisimmistä ja tuntemattomimmista sankareista. Se on näkymätön voima, joka muuttaa laahaavan, pahoinvointia aiheuttavan kokemuksen vakaaksi, uskottavaksi ja mukavaksi virtuaalimaailmaksi. Vaikka WebXR Device API hoitaa mestarillisesti käyttäjän oman pään ja ohjainten liikkeiden ennustamisen ydinkysymyksen, taustalla olevien periaatteiden syvällinen ymmärtäminen on korvaamatonta jokaiselle vakavalle XR-kehittäjälle.
Ymmärtämällä, miten latenssi mitataan ja voitetaan – yksinkertaisesta lineaarisesta ekstrapoloinnista Kalman-suotimen hienostuneeseen tanssiin – saat valmiudet rakentaa edistyneempiä sovelluksia. Olitpa luomassa saumatonta monen käyttäjän metaversumia, suunnittelemassa intuitiivisia fysiikkapohjaisia vuorovaikutuksia tai integroimassa mukautettua laitteistoa, ennustamisen periaatteet ovat avainasemassa luotaessa kokemuksia, jotka eivät vain näytä virtuaalimaailmaa, vaan antavat käyttäjien todella asuttaa sitä.